package cn.ondraw.ragflow.pojo.response;

import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * 列出代理会话响应数据对象
 */
@Data
public class ListAgentSessionsResponseData {
    /**
     * 关联的代理 ID
     */
    private String agent_id;
    /**
     * DSL 数据
     */
    private Dsl dsl;
    /**
     * 会话 ID
     */
    private String id;
    /**
     * 消息列表
     */
    private List<Message> message;
    /**
     * 来源
     */
    private String source;
    /**
     * 用户 ID
     */
    private String user_id;

    @Data
    public static class Dsl {
        /**
         * 答案列表
         */
        private List<Object> answer;
        /**
         * 组件信息
         */
        private Map<String, Component> components;
        /**
         * 图信息
         */
        private Graph graph;
        /**
         * 历史记录
         */
        private List<Object> history;
        /**
         * 消息列表
         */
        private List<Object> messages;
        /**
         * 路径信息
         */
        private List<Object> path;
        /**
         * 参考信息
         */
        private List<Object> reference;
    }

    @Data
    public static class Component {
        /**
         * 下游组件列表
         */
        private List<String> downstream;
        /**
         * 对象信息
         */
        private Obj obj;
        /**
         * 上游组件列表
         */
        private List<String> upstream;
    }

    @Data
    public static class Obj {
        /**
         * 组件名称
         */
        private String component_name;
        /**
         * 参数信息
         */
        private Map<String, Object> params;
    }

    @Data
    public static class Graph {
        /**
         * 边信息
         */
        private List<Object> edges;
        /**
         * 节点信息
         */
        private List<Node> nodes;
    }

    @Data
    public static class Node {
        /**
         * 数据信息
         */
        private NodeData data;
        /**
         * 是否正在拖动
         */
        private boolean dragging;
        /**
         * 高度
         */
        private int height;
        /**
         * 节点 ID
         */
        private String id;
        /**
         * 位置信息
         */
        private Position position;
        /**
         * 绝对位置信息
         */
        private Position positionAbsolute;
        /**
         * 是否选中
         */
        private boolean selected;
        /**
         * 源位置
         */
        private String sourcePosition;
        /**
         * 目标位置
         */
        private String targetPosition;
        /**
         * 节点类型
         */
        private String type;
        /**
         * 宽度
         */
        private int width;
    }

    @Data
    public static class NodeData {
        /**
         * 标签
         */
        private String label;
        /**
         * 名称
         */
        private String name;
        /**
         * 表单信息
         */
        private Map<String, Object> form;
    }

    @Data
    public static class Position {
        /**
         * X 坐标
         */
        private double x;
        /**
         * Y 坐标
         */
        private double y;
    }

    @Data
    public static class Message {
        /**
         * 消息内容
         */
        private String content;
        /**
         * 消息角色
         */
        private String role;
    }
}
